<?php

/*
|--------------------------------------------------------------------------
| Application & Route Filters
|--------------------------------------------------------------------------
|
| Below you will find the "before" and "after" events for the application
| which may be used to do any work before or after a request into your
| application. Here you may also register your custom route filters.
|
*/

class PageData{
    
    private static $mError='';
    private static $mModuleName='';
            
    function __construct() {
        self::$mError = null;
    }
    
    public static function Error(){
        $ErrorList = "";
        if(self::$mError!=null&&count(self::$mError)>0){
            $ErrorList .= " <div class='list-group'>";
                    foreach(self::$mError as $item)
                        $ErrorList .= "<li class='list-group-item list-group-item-danger'>".$item."</li> ";
            $ErrorList .= "</div>";
        }
        return $ErrorList;
    }
    
    public static function getModelState(){
        return self::$mError;
    }
    public static function ModuleName(){
        return self::$mModuleName;
    }
    
    public static function addModelError($key, $err=null) {
		if ($err == null) {
			$err = $key;
			$key = 'An Error Has Occured, please contact your admin!';
		}
		
		if (!is_array(self::$mError)) {
			self::$mError = array();
		}
		
		if (!isset(self::$mError[$key])) {
			self::$mError[$key] = $err;
		}
	}
    
    public static function assignToModelState($errors) {
        if ($errors == null) return;
        if (!is_array(self::$mError)) {
            self::$mError = array();
        }
        
        if (is_array($errors)) {
            self::$mError = array_merge(self::$mError, $errors);
        } else {
            self::$mError[] = $errors;
        }
    }
    
    public static function assignValidatorToModelState($validator){
        self::assignToModelState($validator->messages()->all());
    }
}

App::before(function($request)
{
    PageData::assignToModelState(Session::get('ModelState'));
});


App::after(function($request, $response)
{
});

/*
|--------------------------------------------------------------------------
| Authentication Filters
|--------------------------------------------------------------------------
|
| The following filters are used to verify that the user of the current
| session is logged into this application. The "basic" filter easily
| integrates HTTP Basic authentication for quick, simple checking.
|
*/

Route::filter('auth', function()
{
	if (Auth::guest())
	{
		if (Request::ajax())
		{
			return Response::make('Unauthorized', 401);
		}
		else
		{
			return Redirect::guest('login');
		}
	}
});

Route::filter('isHaveAccess', function()
{
	if (Auth::check())
	{
		if (false)
		{
			return Redirect::guest('/');
		}
	}
});


Route::filter('auth.basic', function()
{
	return Auth::basic();
});

/*
|--------------------------------------------------------------------------
| Guest Filter
|--------------------------------------------------------------------------
|
| The "guest" filter is the counterpart of the authentication filters as
| it simply checks that the current user is not logged in. A redirect
| response will be issued if they are, which you may freely change.
|
*/

Route::filter('guest', function()
{
	if (Auth::check()) return Redirect::to('/home');
});

/*
|--------------------------------------------------------------------------
| CSRF Protection Filter
|--------------------------------------------------------------------------
|
| The CSRF filter is responsible for protecting your application against
| cross-site request forgery attacks. If this special token in a user
| session does not match the one given in this request, we'll bail.
|
*/

Route::filter('csrf', function()
{
	if (Session::token() != Input::get('_token'))
	{
		throw new Illuminate\Session\TokenMismatchException;
	}
});
